实现字符串的库函数

char* _strcpy(char* dest, const char* src)
{
    assert(dest != NULL && src != NULL);
    if (dest == src)
        return dest;
    char* temp = dest;
    while ((*dest++ = *src++) != '\0');
    return temp;
}

char* _strncpy(char* dest, const char* src, unsigned int n)
{
    assert(dest != NULL && src != NULL);
    char* temp = dest;
    while (n-- && *src != '\0')
        *dest++ = *src++;
    *dest = '\0';
    return temp;
}

char* _strcat(char* dest, const char* src)
{
    assert(dest != NULL && src != NULL);
    char* temp = dest;
    while (*dest != '\0')
        dest++;
    while ((*dest++ = *src++) != '\0');
    return temp;
}

char* _strncat(char* dest, const char* src, unsigned int n)
{
    assert((dest != NULL) && (src != NULL));
    char* temp = dest;
    while (*dest != '\0')
        dest++;
    while (n-- && *src != '\0')
        *dest++ = *src++;
    *dest = '\0';
    return temp;
}
    
int _strlen(const char* str)
{
    assert(str);
    int count = 0;
    while (*str++ != '\0')
        count++;
    return count;
}

int _strcmp(const char* s, const char* t)
{
    assert(s != NULL && t != NULL);
    while ((*s != '\0') && (*t != '\0') && (*s == *t))
    {
        s++;
        t++;
    }
    return (*s - *t);
}

char* _strchr(const char* str, int c)
{
    assert(str != NULL);
    while (*str != '\0')
    {
        if (*str == (char)c)
            return (char*)str;
        str++;
    }
    return NULL;
}

char* _strupr(char* str)
{
    assert(str != NULL);
    char* temp = str;
    while (*str != '\0')
    {
        if (*str >= 'a' && *str <= 'z')
            *str -= 0x20;
        str++;
    }
    return temp;
}

char* _strlwr(char* str)
{
    assert(str);
    char* s = str;
    while (*s != '\0')
    {
        if (*s >= 'A' && *s <= 'Z')
            *s += 0x20;
        s++;
    }
    return str;
}

 

strstr

 1 char * __cdecl strstr (const char * str1, const char * str2)
 2 {
 3         char *cp = (char *) str1;
 4         char *s1, *s2;
 5 
 6         if ( !*str2 )
 7             return((char *)str1);
 8 
 9         while (*cp)
10         {
11                 s1 = cp;
12                 s2 = (char *) str2;
13 
14                 while ( *s1 && *s2 && !(*s1-*s2) )
15                         s1++, s2++;
16 
17                 if (!*s2)
18                         return(cp);
19 
20                 cp++;
21         }
22 
23         return(NULL);
24 
25 }


strtok

 1 #include <stdio.h>
 2 
 3 char * ___strtok;
 4 
 5 size_t strspn(const char *s, const char *accept)
 6 {
 7         const char *p;
 8         const char *a;
 9         size_t count = 0;
10         
11         for (p = s; *p != '\0'; ++p)
12         {
13                 for (a = accept; *a != '\0'; ++a) 
14                 {
15                         if (*p == *a)
16                                 break;
17                 }
18                 if (*a == '\0')
19                         return count;
20                 ++count;
21         }
22         
23         return count;
24 }
25 
26 char * strpbrk(const char * cs,const char * ct)
27 {
28         const char *sc1,*sc2;
29         
30         for( sc1 = cs; *sc1 != '\0'; ++sc1) {
31                 for( sc2 = ct; *sc2 != '\0'; ++sc2) {
32                         if (*sc1 == *sc2)
33                                 return (char *) sc1;
34                 }
35         }
36         return NULL;
37 }
38 
39 char * strtok(char * s,const char * ct)
40 {
41         char *sbegin, *send;
42         
43         sbegin  = s ? s : ___strtok;
44         if (!sbegin) {
45                 return NULL;
46         }
47         sbegin += strspn(sbegin,ct);
48         if (*sbegin == '\0') {
49                 ___strtok = NULL;
50                 return NULL;
51         }
52         send = strpbrk( sbegin, ct);
53         if (send && *send != '\0')
54                 *send++ = '\0';
55         ___strtok = send;
56         return sbegin;
57 }
58 
59 int main()
60 {
61         char string[] = "words ,;separated by spaces -- and, punctuation!";
62         const char delimiters[] = " .,;:!-";
63         char *token;
64         
65         token = strtok(string, delimiters);
66         printf("%s\n", token);
67         while(token)
68         {
69                 token = strtok(NULL, delimiters);
70                 if(token)
71                         printf("%s\n", token);
72         }
73         
74         return 0;
75 }

 

posted on 2013-04-16 21:49  月moon鸟  阅读(193)  评论(0编辑  收藏  举报

导航